import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class TcpServer2 {

    // 服务器socket要绑定的固定端口
    private static final int PORT = 8888;

    private static final String BASE_PATH = "D:\\";
    public static void main(String[] args) throws IOException {
        // 1. 创建一个服务端 ServerSocket ，用于收发 TCP报文
        ServerSocket server = new ServerSocket(PORT);
        // 不同的等待客户端连接
        while(true){
            System.out.println("————————————————————————————————————————————————————————————————");
            System.out.println("等待客户端建立TCP连接...");
            // 2. 等待客户端连接， 注意该方法为阻塞方法
            Socket socket = server.accept();
            System.out.printf("客户端IP：%s%n", socket.getInetAddress().getHostAddress());
            System.out.printf("客户端端口号：%s%n", socket.getPort());

            // 5. 接收客户端的数据， 需要从客户端Socket中的输入流读取
            System.out.println("接收到客户端请求");
            InputStream is = socket.getInputStream();
            // 为了方便获取字符串内容， 可以将以上字节流包装为 字符流
            BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
            // 这里 客户端只会发送一行数据，我们也就只需要读取一行  ， 但如果客户端不遵守规则呢
            OutputStream out = socket.getOutputStream();
            PrintWriter pw = new PrintWriter(new OutputStreamWriter(out, "UTF-8"));
            String request = br.readLine();
            String Path = BASE_PATH + request;
            System.out.println("客户端要查询的路径为："+Path);
            File dir = new File(Path);
            if(!dir.isDirectory()){
                //System.out.println("");
                pw.println("你输入的路径有误，查询失败");
            }else{
                File[] filelists = dir.listFiles();
                if(filelists !=null){
                    for(File child : filelists){
                        pw.println(child.getName());
                    }
                }
            }
            // 这里的检查逻辑有点冗余了
            pw.flush();
            // 6. 双方关闭  连接： 服务端是关闭客户端socket 连接
            socket.close();
        }
    }







}
